<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>02.[NodeJS]编辑器配置-调试</title>
        <link rel="stylesheet" type="text/css" media="all" href="http://imagetea.com/wp-content/themes/imagetea/style.css?t=20110615.css" />
    </head>
    <body id="main">
        <div id="content">
            <h1>[NodeJS]编辑器配置-调试</h1>
            <p class="note">
                本篇讲解如何使用eclipse来调试NodeJS程序。
            </p>
            <h2>安装chromedevtools</h2>
            <p>
                NodeJS基于Google V8引擎，<a href="http://code.google.com/p/chromedevtools/" target="_blank">chromedevtools</a>中的<a href="http://code.google.com/p/chromedevtools/wiki/EclipseDebugger">Eclipse debugger</a>
                可以用来调试NodeJS程序。
            </p>
            <p>
                <a href="http://code.google.com/p/chromedevtools/wiki/HowToInstall" target="_blank">How to install Debugger</a>说明了如何将改调试工具安装到eclipse中。
                使用eclipse的人都知道如何安装这个debugger，不过为了照顾熊猫，还是简单演示一下。
            </p>
            <ol>
                <li>
                    <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/01-install-new-software.jpg" />
                </li>
                <li>
                    添加chromedevtolls 更新地址：
                    <code>
                        http://chromedevtools.googlecode.com/svn/update/dev/
                    </code>
                    <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/02-Add-Repository.jpg" />
                </li>
                <li>
                    选择安装 debugger。<img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/03-Install.jpg" />
                </li>
            </ol><h2>调试NodeJs程序</h2>
            <p>
                Eclipse Debugger是一个远程调试的工具，node开一个tcp调试端口，调试工具通过该tcp端口与node通讯，实现调试。
            </p>
            <p>
                使用官方的演示例子来演示如何调试。
                将下面的代码拷贝到app.js中：
                <pre>
                    <code>
var http = require('http');
http.createServer(function(req, res){
    res.writeHead(200, {
        'Content-Type': 'text/plain'
    });
    res.end('Hello Eclipse Debugger\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
                    </code>
                </pre>
                在第一讲中，我们讲过可以使用在命令行中输入 node app.js来执行node脚本，为了能够实现调试功能，我们需要加一个额外的参数：--debug-brk[=port]。
                <pre>
                    <code>
liuqin@02.debugger > node --debug-brk=9222 app.js 
debugger listening on port 9222
                    </code>
                </pre>
                --debug-brk 参数告诉Node程序，需要等待调试器的接入。
            </p>
            <h3>配置调试工具</h3>
            <p>
                <ol>
                    <li>
                        添加调试工具 
                        <br/>
                        <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/04-Debug-Configurations.jpg">
                    </li>
                    <li>
                        选择 V8 VM,并新建
                        <br/>
                        <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/05-Debug-Configurations.jpg">
                    </li>
                    <li>
                        填好Name，选好一个端口号点击Apply，并点击debugger
                        <br/>
                        <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/06-Debug-Configurations.jpg">
                    </li>
                    <li>
                        进入调试界面（如果出现报错，可以将上图中的Host改为‘127.0.0.1’试试）
                        <br />
                        <img src="http://hello-node.googlecode.com/svn/trunk/tutorial/images/07-Debug.jpg" />
                    </li>
                </ol>
            </p>
            <h3>参考资料</h3>
            <ul>
                <li><a href="https://github.com/joyent/node/wiki/Using-Eclipse-as-Node-Applications-Debugger" target="_blank">Using Eclipse as Node Applications Debugger</a></li>
            </ul>
        </div>
    </body>
</html>